package sismed.dados.hibernate.dao;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import sismed.dao.IDAOCirurgia;
import sismed.hibernate.util.HibernateUtil;
import sismed.negocio.modelo.Cirurgia;

public class DAOHibernateCirurgia implements IDAOCirurgia
{

	private Session sessaoHibernate;
	private Transaction t;
	
	public DAOHibernateCirurgia()
	{
		super();		
		sessaoHibernate = HibernateUtil.getSession();
		t = sessaoHibernate.beginTransaction();
	}

	public boolean cadastrar(Cirurgia cirurgia) 
	{
		t = sessaoHibernate.beginTransaction();
		
		try
		{
			sessaoHibernate.merge(cirurgia);
			t.commit();			
		}
		catch (Exception e) 
		{
			t.rollback();
		}
		finally
		{
			sessaoHibernate.clear();
		}
		
		return true;
	}

	public Cirurgia getCirurgia(int idCirurgia) 
	{		
		return (Cirurgia)sessaoHibernate.load(Cirurgia.class, idCirurgia);
	}

	public List<Cirurgia> recuperarLista(int idcirurgia) 
	{
		Query query = sessaoHibernate.createQuery("from Cirurgia where id='"+idcirurgia+"'");				
		return query.list();
	}

	public List<Cirurgia> recuperarLista() 
	{
		return sessaoHibernate.createCriteria(Cirurgia.class).list();
	}

	public List<Cirurgia> recuperarListaPorMedico(int idMedico) 
	{		
		Query query = sessaoHibernate.createQuery("from Cirurgia as med where med.medico.id='"+idMedico+"'");
	
		return query.list();
	}

	public List<Cirurgia> recuperarListaPorPaciente(int idPaciente) 
	{
		Query query = sessaoHibernate.createQuery("from Cirurgia as med where med.paciente.id='"+idPaciente+"'");
		
		return query.list();
	}

	public void remover(Cirurgia cirurgia) 
	{
		t = sessaoHibernate.beginTransaction();

		try
		{
			sessaoHibernate.delete(cirurgia);
			t.commit();
			
			cirurgia = new Cirurgia();
		}
		catch (Exception e) 
		{
			t.rollback();
		}
		finally
		{		
			sessaoHibernate.clear();
		}
				
	}

	
}
